import { createPinia } from 'pinia';
import piniaPersist from 'pinia-plugin-persist-uni';

// 自动注入所有pinia模块
const files = import.meta.glob('./*.js', { eager: true });
let modules = null;
let piniaInstance = null;

function getModules() {
  if (!modules) {
    modules = {};
    Object.keys(files).forEach((key) => {
      const moduleName = key.replace(/(.*\/)*([^.]+).*/gi, '$2');
      try {
        const module = files[key];
        if (module && module.default) {
          modules[moduleName] = module.default;
        }
      } catch (error) {
        console.warn(`Failed to load store module "${moduleName}":`, error);
      }
    });
  }
  return modules;
}

export const setupPinia = (app) => {
  const pinia = createPinia();
  pinia.use(piniaPersist);
  piniaInstance = pinia;
  app.use(pinia);
  // 预加载所有模块（现在 pinia 已初始化，可以安全加载）
  getModules();
};

// 创建一个安全的占位 store 对象
function createSafeStore(name) {
  return {
    isLogin: false,
    userInfo: {},
    userWallet: {},
    numData: {},
    // 添加其他可能被访问的属性，避免访问未定义属性时报错
    getInfo: () => Promise.resolve(null),
    loginAfter: () => {},
    setToken: () => {},
    // 其他可能被调用的方法
  };
}

export default (name) => {
  // 如果 pinia 还没有初始化，返回安全的占位对象
  if (!piniaInstance) {
    return createSafeStore(name);
  }
  
  try {
    const modulesMap = getModules();
    if (!modulesMap[name]) {
      console.error(`Store module "${name}" not found`);
      return createSafeStore(name);
    }
    const store = modulesMap[name]();
    // 如果返回 null，创建一个安全的占位对象
    if (!store) {
      return createSafeStore(name);
    }
    return store;
  } catch (error) {
    // 如果模块尚未初始化，返回一个安全的占位对象
    if (error.message?.includes('before initialization') || 
        error.message?.includes('Cannot access') ||
        error.message?.includes('not been initialized')) {
      return createSafeStore(name);
    }
    console.warn(`Store module "${name}" is not yet initialized:`, error);
    return createSafeStore(name);
  }
};

